home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import rhythmdb
- import rb
- import gobject
- import gtk
- import coherence.extern.louie as louie
- from coherence import log
- import os.path as os
- import urllib
- import gtk.gdk as gtk
-
- class CoherencePlugin(rb.Plugin, log.Loggable):
- logCategory = 'rb_coherence_plugin'
-
- def __init__(self):
- rb.Plugin.__init__(self)
- self.coherence = None
-
-
- def activate(self, shell):
- gtk2reactor = gtk2reactor
- import twisted.internet
-
- try:
- gtk2reactor.install()
- except AssertionError:
- e = None
- print e
-
- self.coherence = self.get_coherence()
- if self.coherence is None:
- print 'Coherence is not installed or too old, aborting'
- return None
- print 'coherence UPnP plugin activated'
- self.shell = shell
- self.sources = { }
- the_icon = None
- face_path = os.path.join(os.path.expanduser('~'), '.face')
- if os.path.exists(face_path):
- url = 'file://' + urllib.pathname2url(face_path)
-
- try:
- import gio
- f = gio.File(url)
- fi = f.query_info(gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)
- ctype = fi.get_attribute_string(gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE)
- mimetype = gio.content_type_get_mime_type(ctype)
- except:
- import gnomevfs
- mimetype = gnomevfs.get_mime_type(url)
-
- pixbuf = gtk.gdk.pixbuf_new_from_file(face_path)
- width = '%s' % pixbuf.get_width()
- height = '%s' % pixbuf.get_height()
- depth = '24'
- the_icon = {
- 'url': url,
- 'mimetype': mimetype,
- 'width': width,
- 'height': height,
- 'depth': depth }
- else:
- the_icon = None
- MediaServer = MediaServer
- import coherence.upnp.devices.media_server
- MediaStore = MediaStore
- import MediaStore
- if the_icon:
- server = MediaServer(self.coherence, MediaStore, no_thread_needed = True, db = self.shell.props.db, plugin = self, icon = the_icon)
- else:
- server = MediaServer(self.coherence, MediaStore, no_thread_needed = True, db = self.shell.props.db, plugin = self)
- self.uuid = str(server.uuid)
- if self.coherence_version >= (0, 5, 2):
- MediaRenderer = MediaRenderer
- import coherence.upnp.devices.media_renderer
- RhythmboxPlayer = RhythmboxPlayer
- import MediaPlayer
- if the_icon:
- MediaRenderer(self.coherence, RhythmboxPlayer, no_thread_needed = True, shell = self.shell, icon = the_icon)
- else:
- MediaRenderer(self.coherence, RhythmboxPlayer, no_thread_needed = True, shell = self.shell)
-
- louie.connect(self.detected_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.detected', louie.Any)
- louie.connect(self.removed_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.removed', louie.Any)
-
-
- def deactivate(self, shell):
- print 'coherence UPnP plugin deactivated'
- if self.coherence is None:
- return None
- self.coherence.shutdown()
- louie.disconnect(self.detected_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.detected', louie.Any)
- louie.disconnect(self.removed_media_server, 'Coherence.UPnP.ControlPoint.MediaServer.removed', louie.Any)
- del self.shell
- del self.coherence
- for usn, source in self.sources.iteritems():
- source.delete_thyself()
-
- del self.sources
-
-
- def get_coherence(self):
- coherence_instance = None
- required_version = (0, 5, 7)
-
- try:
- Coherence = Coherence
- import coherence.base
- __version_info__ = __version_info__
- import coherence
- except ImportError:
- e = None
- print 'Coherence not found'
- return None
-
- if __version_info__ < required_version:
- required = []([ str(i) for i in required_version ])
- found = []([ str(i) for i in __version_info__ ])
- print 'Coherence %s required. %s found. Please upgrade' % (required, found)
- return None
- self.coherence_version = __version_info__
- coherence_config = {
- 'controlpoint': 'yes',
- 'plugins': { } }
- coherence_instance = Coherence(coherence_config)
- return coherence_instance
-
-
- def removed_media_server(self, udn):
- print 'upnp server went away %s' % udn
- if self.sources.has_key(udn):
- self.sources[udn].delete_thyself()
- del self.sources[udn]
-
-
-
- def detected_media_server(self, client, udn):
- print 'found upnp server %s (%s)' % (client.device.get_friendly_name(), udn)
- self.warning('found upnp server %s (%s)' % (client.device.get_friendly_name(), udn))
- if client.device.get_id() == self.uuid:
- return None
- db = self.shell.props.db
- group = rb.rb_source_group_get_by_name('shared')
- entry_type = db.entry_register_type('CoherenceUpnp:' + client.device.get_id()[5:])
- UpnpSource = UpnpSource
- import UpnpSource
- source = gobject.new(UpnpSource, shell = self.shell, entry_type = entry_type, source_group = group, plugin = self, client = client, udn = udn)
- self.sources[udn] = source
- self.shell.append_source(source, None)
-
-
-